package fileStore

//IStoreClient 文件存储客户端
type IStoreClient interface {

	//StartDefault 开始文件上传[本地缓存]
	//extName 扩展名
	//file    文件数据块【不可为空】
	//index   文件段序号（传小于0内部默认按插入顺序从0开始）序号一样会覆盖
	//id      返回的索引
	//error   数据或扩展名不对时
	StartDefault(extName string, file []byte, index int) (id string, err error)

	//Start 开始文件上传[本地缓存]
	//extName 文件扩展名【不带. 如 jpg mp3】
	//file    文件数据块【不可为空】
	//index   文件段序号（传小于0内部默认按插入顺序从0开始）序号一样会覆盖
	//ttl     应用程序缓存时间[秒]
	//id      返回的索引
	//error   数据或扩展名不对时
	Start(extName string, file []byte, index int, ttl int64) (id string, err error)

	//IsExist 判断当前缓存文件中是否存在指定的包
	//id     开始返回的索引
	//index  文件段序号（传小于0内部默认按插入顺序从0开始）序号一样会覆盖
	//exist  是否存在(true存在，false不存在)
	//err     id索引不存在时异常
	IsExist(id string, index int) (exist bool, err error)

	// GetIndexSlice 获取缓存了的序号切片
	//id     开始返回的索引
	//切片    已经缓存的序号切片，按序号排序
	//err    id索引不存在时异常
	GetIndexSlice(id string)([]int,error)

	//Continue 继续
	//id      开始返回的索引
	//file    文件数据块【不可为空】
	//index   文件段序号（传小于0内部默认按插入顺序从0开始）序号一样会覆盖
	//error   本地无缓存或缓存失效时
	Continue(id string, file []byte, index int) (count int64, err error)

	//Complete 完成
	//id      开始返回的索引
	//file    文件数据块【可为空】
	//index   文件段序号（传小于0内部默认按插入顺序从0开始）序号一样会覆盖
	//error   本地无缓存或缓存失效时
	Complete(id string, file []byte, index int, hf func([]byte, []int) ([]byte, bool)) (path string, err error)

	//Upload 文件上传
	//extName  文件扩展名【不带. 如 jpg mp3】
	//file     完整数据
	//path     返回 文件路径
	Upload(extName string, file []byte) (path string, err error)

	//Delete 文件删除
	//path     文件路径
	//ok       是否删除成功
	Delete(path string) (ok bool, err error)
}
